package main

import (
	"fmt"
	"sync"
)

var w sync.WaitGroup // 只定义无需赋值
func main() {
	w.Add(5)
	for i := 0; i < 5; i++ {
		// 启动五个协程,匿名函数
		go func(n int) {
			defer w.Done()
			// 因为闭包的概念,如果这里不加参数接收的话,直接打印i,可能会打印5,
			fmt.Println(n) // 乱序打印0到4
		}(i)
	}
	// 主线程要等待,不然协程很可能没执行完就被主死从随
	w.Wait()
}
